package app.com.myanr;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.TextView;

import static java.lang.Thread.sleep;

/**
 * Created by Administrator on 2017/9/12.
 *
 * AsyncTask优点：简单，快捷
 缺点：当有多个异步操作时并需要变更ui复杂
 */

public class AsyncTaskActivity extends Activity {


    private TextView textView;
    private int progress = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        textView = (TextView) findViewById(R.id.text);

        new MyAsync().execute();

    }
/*
* AsyncTask是一个抽象类，我们需要一个子类继承它并提供三个泛型参数。

Params 参数
Progress 进度
Result 返回结果
class MyAsync extend AsyncTask< Void,Integer,Boolean>
Void表示不需要传参数给后台，Integer表示用整形的数来表示过程，Boolean表示用布尔
* */
    private class MyAsync extends AsyncTask <Void, Integer, Boolean> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Log.d("======onPreExecute","显示加载");
        }
/*
AsyncTask <Void, Integer, Boolean>

* 1.Void 表示没有传数据过来
* new MyAsync().execute();
*
* 如果是String
* new MyAsync().execute(“这里得传一个String类型”);
*
* 2.doInBackground 返回的结果的boolean。这个结果是执行完后给onPostExecute(Boolean aBoolean)这边来的，onPostExecute可以做成功后的操作
* */
        @Override
        protected Boolean doInBackground(Void... params) {
            while (true){
                try {
                    Thread.sleep(1000);
                    progress += 10;
                    publishProgress(progress); //如果没有这个，onProgressUpdate是没有值的，也就不执行了
                    if(progress >= 100)
                        break;

                } catch (InterruptedException e) {
                    e.printStackTrace();
                    return false;
                }
            }
            return true;
        }
/*
* AsyncTask <Void, Integer, Boolean>
*           第二个参数传到这边
*     onProgressUpdate(Integer... values)
*       这个values是doInBackgroun 的 publishProgress(progress); 传递过来的值，没有就不走这一步
* */
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            Log.d("=====onPostExecute","下载进度"+values[0]);
            textView.setText( "i =  " + values[0]);
        }

    /*
    * AsyncTask <Void, Integer, Boolean>
    *     最后一个参数
    * */
        @Override
        protected void onPostExecute(Boolean aBoolean) {
            super.onPostExecute(aBoolean);
            if(aBoolean){
                Log.d("=====onPostExecute","下载成功");
            }else{
                Log.d("=====onPostExecute","下载失败");
            }
        }
    }

}
